<!DOCTYPE html>
<html>
<head>
<title>Tests integrity enforcement on fetch()</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<script>
var SRITest = function(pass, name, src, integrity, expectedValue) {
    this.pass = pass;
    this.name = name;
    this.src = src;
    this.integrity = integrity;
    this.expectedValue = expectedValue;
}
SRITest.prototype.execute = function() {
    var pass = this.pass;
    var src = this.src;
    var integrity = this.integrity;
    var expectedValue = this.expectedValue;
    var options = {};
    if (integrity !== '') {
        options.integrity = integrity;
    }
    promise_test(function() {
        return fetch(src, options)
            .then(function(response) {
                assert_true(pass, "Response should resolve");

                if (expectedValue) {
                    return response.text().then(function(actualValue) {
                        assert_equals(actualValue, expectedValue, "Value consumed must match hashed value.");
                    });
                }
            }, function() {
                assert_false(pass, "Response should be rejected");
            })
    }, this.name);
}

new SRITest(true, 'No integrity', 'call-success.js', '', 'success();\n').execute();
new SRITest(true, 'Good integrity', 'call-success.js', 'sha256-B0/62fJSJFrdjEFR9ba04m/D+LHQ+zG6PGcaR0Trpxg=', 'success();\n').execute();
new SRITest(false, 'Bad integrity', 'call-success.js', 'sha256-deadbeef').execute();
new SRITest(false, 'Bad integrity and an img', '/resources/square100.png', 'sha256-B0/62fJSJFrdjEFR9ba04m/D+LHQ+zG6PGcaR0Trpxg=').execute();
new SRITest(true, 'Good integrity and an img', '/resources/square100.png', 'sha256-Ly1v7MxPoMXjm9Dwrr4mDCVUe1PAA781vd0G8xvgpj8=').execute();
</script>
</body>
</html>
